#ifndef  TRAFFIC_INFO_H
#define TRAFFIC_INFO_H

#include <stdbool.h>
// gtacker
#include"gtrack.h"

// 交通事件类型定义
typedef enum {
	EVENT_NONE = 0,							// 无事发生 0
	EVENT_OVERSPEED,						// 超速事件 1
	EVENT_UNDERSPEED,						// 低速事件 2
	EVENT_REVERSE_DRIVING,				// 逆行事件 3
	EVENT_ABRUPT_STOP,					// 停止事件 4
	EVENT_ILLEGAL_LANE_CHANGE,	// 非法变道事件 5
	EVENT_TRAFFIC_JAM,						// 拥堵事件 6
	EVENT_DRIVE_AWAY						// 驶离事件 7
} TrafficEventType;

// 拥堵事件信息定义
typedef struct Traffic_jam
{
	uint8_t hasTrafficJam;						// 有无交通拥堵发生
	uint8_t targetNum_of_lane;				// 每个车道的车辆数量
	float lane_speed_sum;						// 每个车道上的车辆速度总和
	float queue_length;							// 排队长度
	float head_pos;								// 队首位置
	float tail_pos;									// 队尾位置
}Traffic_jam;

// 目标事件定义
typedef struct Traffic_event
{
	uint16_t ID;										// 发生交通事件的目标ID
	TrafficEventType  traffic_event;		// 发生的事件类型
	float confidence;								// 检测置信度
}Traffic_event;

#define STAT_PERIOD_STAMP   10			// 统计周期30秒（单位：毫秒）
#define GRID_SIZE						0.1f		// 网格尺寸（米）
#define VEHICLE_LENGTH			3.5f      // 车辆长度，临时定义

// 时间占有率计数器
typedef struct 
{
	uint32_t last_update;				// 最后更新时间戳
	float occupied_time;				// 累计占用时间(ms)
	bool current_state;					// 当前是否被占用
	uint32_t period_start;				// 当前周期开始时间
} TimeOccupancyCounter;

// 交通流量信息定义
typedef struct Traffic_FlowParameters
{
	int last_car_id;																	// 最后通过车辆id
	int last_time;																	// 最后通过时间(暂时为帧数)
	uint16_t lane_volume;														// 单车道流量 
	float avg_speed;																// 平均速度
	float time_occupancy_rate;												// 时间占有率
	float space_occupancy_rate;											// 空间占有率
	float time_headway;													    // 平均车头时距
	float avg_space_headway;												// 平均车头间距
	TimeOccupancyCounter time_occupancy_module;		// 时间占有率计算器

}Traffic_FlowParameters;//数据格式再推敲

// 交通信息定义（包括流量信息、事件信息等）
typedef struct Traffic_info
{
	uint32_t date;																	// 日期 或者 帧数
	uint16_t road_num;															// 车道个数
	uint16_t cur_traffic_event_num;										// 当前帧事件数量
	uint16_t total_volume;														// 车流总量 累加
	Traffic_FlowParameters*  traffic_FlowParameters;			// 基本交通信息
	Traffic_jam* traffic_Jam;													// 车流排队情况
	Traffic_event* traffic_Event;												// 单车交通事件
}Traffic_info;

#endif //TRAFFIC_INFO_H